﻿using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Text;

public partial class Venta_PuntoVenta : Global
{
    private bool Inicio
    {
        get { return (bool)ViewState["_Inicio"]; }
        set { ViewState["_Inicio"] = value; }
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            Inicio = false;            
        }
    }

    protected void Timer_Tick(object sender, EventArgs e)
    {
        try
        {
            Timer.Enabled = true;
            lblTimer.Text = DateTime.Now.ToLongTimeString();            
            //DataSet dts = (DataSet)sdsRecepcion.Select(DataSourceSelectArguments.Empty);
            string captura = "RFID";
            if (rblOpcion.SelectedValue.ToString() == "1")
                captura = "CODIGO_BARRAS";

            DataSet dts = oGDataBlocks.RegistraVenta(Convert.ToInt32(UsrID(Context).ToString()), 2, Convert.ToInt32(this.lblRecepcion.Text), 0, captura);

            this.grdRecepcion.DataSource = dts.Tables[0];
            this.grdRecepcion.DataBind();

            //Si llega algo en la tabla 1 es el cliente
            if (dts.Tables[1].Rows.Count > 0)
            {
                this.hdnIdCliente.Value = dts.Tables[1].Rows[0]["ID"].ToString();
                this.lblNombreCliente.Text = dts.Tables[1].Rows[0]["RAZONSOCIAL"].ToString();
                this.lblPuntosCliente.Text = dts.Tables[1].Rows[0]["PUNTOS"].ToString();
                this.imgFotoCliente.ImageUrl = "~/Clientes/imgCliente/" + dts.Tables[1].Rows[0]["FOTO"].ToString();
            }

            int precio = 0;
            int puntos = 0;
            if (dts.Tables[0].Compute("SUM(PRECIO)", "") != null)
                precio = Convert.ToInt32(dts.Tables[0].Compute("SUM(PRECIO)", ""));

            puntos = precio / 10;

            this.lblPrecioTotal.Text = precio.ToString();
            this.lblPuntosCompra.Text = puntos.ToString();
            this.ScriptManager1.SetFocus(this.txtSerial.ClientID);
        }
        catch (Exception EX)
        {
            oGDataBlocks.RegistraError(0, 0, "Punto de venta - Error 3: " + EX.Message);
        }
    }

    protected void btnDetener_Click(object sender, EventArgs e)
    {
        if (Inicio)
        {
            this.lblSerial.Visible = false;
            this.txtSerial.Visible = false;            
            this.rblOpcion.Enabled = true;
            this.btnIniciar.Enabled = true;
            this.lblInicio.Text = string.Empty;
            this.lblUltima.Text = "Ultima Venta: ";
            this.lblTimer.Text = string.Empty;
            this.grdRecepcion.DataSource = null;
            this.grdRecepcion.DataBind();
            Timer.Enabled = false;

            oGReaderVenta.stop();            

            //Se muestra la tabla para que se seleccione al forma de pago
            this.tblFormaPago.Visible = true;            
            
        }
        else
            oGJS.ScriptAlert("Para detener el proceso debe iniciarlo", false, Page);

    }

    protected void btnIniciar_Click(object sender, EventArgs e)
    {
        if (rblOpcion.SelectedValue.ToString() == "1")
        {
            this.lblSerial.Visible = true;
            this.txtSerial.Visible = true;
        }
        else
        {
            this.lblSerial.Visible = false;
            this.txtSerial.Visible = false;        
        }
        
        try
        {
            this.lblUltima.Text = "Numero de Venta: ";
            this.lblNombreCliente.Text = "ESPERANDO LEER EL CLIENTE";
            this.lblTotal1.Visible = true;
            this.lblTotal2.Visible = true;
            this.lblPrecioTotal.Visible = true;
            this.lblPuntosCompra.Visible = true;
            this.tblFormaPago.Visible = false;
            Inicio = true;
            this.rblOpcion.Enabled = false;
            DataSet dts = oGDataBlocks.RegistraVenta(Convert.ToInt32(UsrID(Context).ToString()), 1, 0, 0, "");

            this.lblRecepcion.Text = dts.Tables[0].Rows[0][0].ToString();

            //Trae ip del reader
            string ipRecepcion = oGDataBlocks.GetValorConfiguracion("IPREADERVENTA");
            oGReaderVenta.ip = ipRecepcion;

            //Siempre se inicia el reader sin importar si se lee RFID o codigo de barras, porque el cliente
            //siempre se lee con RFID
            //oGReaderVenta.start(6, System.Convert.ToInt32(this.lblRecepcion.Text), System.Convert.ToInt32(this.rblOpcion.SelectedValue));
            Timer.Enabled = true;
                        
            this.lblInicio.Text = DateTime.Now.ToLongTimeString();
            this.btnIniciar.Enabled = false;

        }
        catch (Exception EX)
        {
            //oGJS.ScriptAlert("CEDIS - Ocurrio un error en el sistema: " + EX.Message, false, Page);
            oGDataBlocks.RegistraError(0, 0, "Punto de venta - Error 2: " + EX.Message);
        }
    }

    private void GuardarCodigoBarras()
    {
        Global oGGlobal = new Global();
        string codigo = this.txtSerial.Text;
        if (!codigo.Equals(System.DBNull.Value))
        {
            //Construye xml con los codigos que llegan
            StringBuilder xml = new StringBuilder();
            xml.Append("<TAGS>");
            String[] separador = { ";" };
            String[] arreglo = codigo.Split(separador, StringSplitOptions.None);
            string ean13;
            string ean14;
            for (int i = 0; i < arreglo.Length; i++)
            {
                ean13 = "";
                ean14 = "";
                try
                {
                    if (arreglo[i].Length >= 12)
                    {
                        //Si son 14 digitos se leyo un EAN14
                        if (arreglo[i].Length == 14)
                        {
                            //ean13 = arreglo[i].Substring(1, 12);
                            ean14 = arreglo[i];
                        }
                        else
                        {
                            ean13 = arreglo[i].Substring(0, 12);
                            //ean14 = oGEPC.GetEAN14(ean13);
                        }

                        if (ean13.Length == 12)
                            ean13 = ean13 + oGEPC.CalcularDigitoControl("EAN13", ean13);

                        xml.Append("<LECTURA VALOR='" + arreglo[i] + "' EAN13='" + ean13 + "' EPC='' EAN14='" + ean14 + "' />");
                    }
                }
                catch
                {
                }
            }
            xml.Append("</TAGS>");

            if (xml.Length > 15)
            {
                try
                {
                    DataBlocks oGDataBlocks = new DataBlocks();
                    oGDataBlocks.InsertaLectura(xml.ToString(), 6, System.Convert.ToInt32(this.lblRecepcion.Text), 1);
                    this.txtSerial.Text = "";                    
                }
                catch (Exception ex)
                {
                    oGJS.ScriptAlert("NO se insertó lo leído: " + ex.Message, false, Page);
                }
            }
        }
    }

    protected void ScriptManager1_AsyncPostBackError(object sender, AsyncPostBackErrorEventArgs e)
    {
        //No se hace nada en este evento, simplemente se declara el evento para que atrape el error
        //y no lo muestre al usuario. No se hace nada porque todo esta funcionando OK, pero a veces
        //las llamadas asincronas generan este error
        ScriptManager1.AsyncPostBackErrorMessage = "";
        //if (e.Exception.Data["ExtraInfo"] != null)        
        //    ScriptManager1.AsyncPostBackErrorMessage = e.Exception.Message + e.Exception.Data["ExtraInfo"].ToString();        
        //else
        //    ScriptManager1.AsyncPostBackErrorMessage = "An unspecified error occurred.";
    }

    protected void txtSerial_TextChanged(object sender, EventArgs e)
    {
        this.GuardarCodigoBarras();
        this.ScriptManager1.SetFocus(this.txtSerial.ClientID);
    }


    protected void btnPagar_Click(object sender, EventArgs e)
    {

        //Actualiza el cliente de la venta
        oGDataBlocks.ActualizarClienteVenta(Convert.ToInt32(this.lblRecepcion.Text), Convert.ToInt32(this.hdnIdCliente.Value));

        string captura = "RFID";
        if (rblOpcion.SelectedValue.ToString() == "1")
            captura = "CODIGO_BARRAS";

        string formaPago = "";
        if (this.rbtnCredito30.Checked)
            formaPago = "Credito 30 días";
        else if (this.rbtnCredito60.Checked)
            formaPago = "Credito 60 días";
        else if (this.rbtnContraEntrega.Checked)
            formaPago = "Contra entrega";
        else if (this.rbtnEfectivo.Checked)
            formaPago = "Efectivo";

        //Se abre ventana para mostrar la factura
        oGJS.OpenWindow("Factura", "Factura.aspx?ID=" + this.lblRecepcion.Text + "&forma=" + formaPago + "&captura=" + captura, "Factura", "width=550, height=500,center=yes,toolbar=no,status=yes,menubar=no,scrollbars=yes,top=200,left=280,dependent=yes,alwaysRaised=yes", "", Page);
    }


}